package com.im.immodel.config

import com.hotpot.sdk.utils.CONVERT_DISCERN_FAIL
import com.hotpot.sdk.utils.CONVERT_SUCCESS
import com.hotpot.sdk.utils.Constants
import com.hotpot.uikit.R
import com.hotpot.uikit.talk.config.listener.MsgLongPopActionProxy
import com.hotpot.uikit.view.pop.listener.TalkingPopupListener
import com.zjkj.qgbui.xpop.option_b_menu.TalkingActionEntity
import java.util.*

/**
 * @ClassName MsgActionPresenter
 * @Description TODO
 * @Author ryan-tang
 * @Date 2021/8/27 10:00
 * @Version 1.0
 */
class IMMsgLongPopActionPresenter : MsgLongPopActionProxy {
    //        显示规则
//        1、文本消息 （单聊）
//        1.1、自己发送的->督办、复制、转发、回复、撤回、多选、删除
//        1.2、他人发送的->督办、复制、转发、回复、多选、删除
//
//        2、文本消息（群聊）
//        2.1、自己发送的->督办、复制、转发、回复、撤回、多选、删除
//        2.2、他人发送的（非管理员/群主权限）->督办、复制、转发、回复、多选、删除
//        2.3、他人发送的（是管理员/群主权限）->督办、复制、转发、回复、撤回、多选、删除
//
//        3、小表情（单聊）
//        3.1、自己发送的->督办、复制、转发、回复、撤回、多选、删除
//        3.2、他人发送的->督办、复制、转发、回复、多选、删除
//
//        4、小表情（群聊）
//        4.1、自己发送的->督办、复制、转发、回复、撤回、多选、删除
//        4.2、他人发送的（非管理员/群主权限）->督办、复制、转发、回复、多选、删除
//        4.3、他人发送的（是管理员/群主权限）->督办、复制、转发、回复、撤回、多选、删除
//
//        5、点赞表情（单聊）
//        5.1、自己发送的->转发、回复、撤回、多选、删除
//        5.2、他人发送的->转发、回复、多选、删除
//
//        6、点赞表情（群聊）
//        6.1、自己发送的->转发、回复、撤回、多选、删除
//        6.2、他人发送的（非管理员/群主权限）->转发、回复、多选、删除
//        6.3、他人发送的（是管理员/群主权限）->转发、回复、撤回、多选、删除
//
//        7、图片（单聊）
//        7.1、自己发送的->督办、转发、回复、撤回、多选、删除
//        7.2、他人发送的->督办、转发、回复、多选、删除
//
//        8、图片（群聊）
//        8.1、自己发送的->督办、转发、回复、撤回、多选、删除
//        8.2、他人发送的（非管理员/群主权限）->督办、转发、回复、多选、删除
//        8.3、他人发送的（是管理员/群主权限）->督办、转发、回复、撤回、多选、删除
//
//        9、视频（单聊）
//        9.1、自己发送的->转发、回复、撤回、多选、删除
//        9.2、他人发送的->转发、回复、多选、删除
//
//        10、视频（群聊）
//        10.1、自己发送的->转发、回复、撤回、多选、删除
//        10.2、他人发送的（非管理员/群主权限）->转发、回复、多选、删除
//        10.3、他人发送的（是管理员/群主权限）->转发、回复、撤回、多选、删除
//
//        11、文件（单聊）
//        11.1、自己发送的->督办、转发、回复、撤回、多选、删除
//        11.2、他人发送的->督办、转发、回复、多选、删除
//        注意：只读权限的文件不允许转发
//
//        12、文件（群聊）
//        12.1、自己发送的->督办、转发、回复、撤回、多选、删除
//        12.2、他人发送的（非管理员/群主权限）->督办、转发、回复、多选、删除
//        12.3、他人发送的（是管理员/群主权限）->督办、转发、回复、撤回、多选、删除
//        注意：只读权限的文件不允许转发
//
//        13、群公告（群聊）
//        13.1、自己发送的->撤回、删除
//        13.2、他人发送的（非管理员/群主权限）->删除
//        13.3、他人发送的（是管理员/群主权限）->撤回、删除
//
//        14、督办（单聊）
//        14.1、自己发送的->复制、回复、撤回、多选、删除
//        14.2、他人发送的->复制、回复、多选、删除
//
//        15、督办（群聊）
//        15.1、自己发送的->复制、回复、撤回、多选、删除
//        15.2、他人发送的（非管理员/群主权限）->复制、回复、多选、删除
//        15.3、他人发送的（是管理员/群主权限）->复制、回复、撤回、多选、删除
//
//        16、名片（单聊）
//        16.1、自己发送的->转发、回复、撤回、多选、删除
//        16.2、他人发送的->转发、回复、多选、删除
//
//        17、名片（群聊）
//        17.1、自己发送的->转发、回复、撤回、多选、删除
//        17.2、他人发送的（非管理员/群主权限）->转发、回复、多选、删除
//        17.3、他人发送的（是管理员/群主权限）->转发、回复、撤回、多选、删除
//
//        18、位置（单聊）
//        18.1、自己发送的->转发、回复、撤回、多选、删除
//        18.2、他人发送的->转发、回复、多选、删除
//
//        19、位置（群聊）
//        19.1、自己发送的->转发、回复、撤回、多选、删除
//        19.2、他人发送的（非管理员/群主权限）->转发、回复、多选、删除
//        19.3、他人发送的（是管理员/群主权限）->转发、回复、撤回、多选、删除
//
//        20、语音（单聊）
//        20.1、自己发送的->督办、语音转文字（收起文字）、撤回、多选、删除
//        20.2、他人发送的->督办、语音转文字（收起文字）、多选、删除
//
//        21、语音（群聊）
//        21.1、自己发送的->督办、语音转文字（收起文字）、撤回、多选、删除
//        21.2、他人发送的（非管理员/群主权限）->督办、语音转文字（收起文字）、多选、删除
//        21.3、他人发送的（是管理员/群主权限）->督办、语音转文字（收起文字）、撤回、多选、删除
//
//        22、合并转发的聊天记录（单聊）
//        22.1、自己发送的->督办、转发、撤回、多选、删除
//        22.2、他人发送的->督办、转发、多选、删除
//
//        23、合并转发的聊天记录（群聊）
//        23.1、自己发送的->督办、转发、撤回、多选、删除
//        21.2、他人发送的（非管理员/群主权限）->督办、转发、多选、删除
//        21.3、他人发送的（是管理员/群主权限）->督办、转发、撤回、多选、删除
//
//        24、通话标签（单聊）
//        24.1、自己、他人：删除
//
//        25、回复（单聊）
//        25.1、自己发送的->督办、复制、转发、回复、撤回、多选、删除
//        25.2、他人发送的->督办、复制、转发、回复、多选、删除
//
//        26、回复（群聊）
//        26.1、自己发送的->督办、复制、转发、回复、撤回、多选、删除
//        26.2、他人发送的（非管理员/群主权限）->督办、复制、转发、回复、多选、删除
//        26.3、他人发送的（是管理员/群主权限）->督办、复制、转发、回复、撤回、多选、删除
    override fun getMsgActionList(
            msgType: String,
            isMe: Boolean,
            audioTxtStatus: Int,
            isQunZhu: Boolean,
            isCancelOutTime: Boolean
    ): List<TalkingActionEntity> {
        val list: MutableList<TalkingActionEntity> = ArrayList()
        if (isMe) {
            when (msgType) {
                Constants.TEXT, Constants.TOUCH, Constants.REPLY, Constants.HYPERLINKS -> {
//                    list.add(TalkingActionEntity("督办", R.mipmap.icon_supervise))
                    list.add(TalkingActionEntity("复制", R.mipmap.icon_copy))
                    list.add(TalkingActionEntity("转发", R.mipmap.icon_forward))
                    list.add(TalkingActionEntity("回复", R.mipmap.icon_reply))
                    if (!isCancelOutTime) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.AUDIO -> {
//                    list.add(TalkingActionEntity("督办", R.mipmap.icon_supervise))
                    if (audioTxtStatus == CONVERT_SUCCESS || audioTxtStatus == CONVERT_DISCERN_FAIL) {
                        list.add(TalkingActionEntity("收起文字", R.mipmap.icon_away_text))
                    } else {
                        list.add(TalkingActionEntity("转文字", R.mipmap.icon_to_text))
                    }
                    if (!isCancelOutTime) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.IMAGE, Constants.LINK -> {
//                    list.add(TalkingActionEntity("督办", R.mipmap.icon_supervise))
                    list.add(TalkingActionEntity("转发", R.mipmap.icon_forward))
                    list.add(TalkingActionEntity("回复", R.mipmap.icon_reply))
                    if (!isCancelOutTime) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.VIDEO, Constants.DIANZAN, Constants.LOCATION, Constants.CARD -> {
                    list.add(TalkingActionEntity("转发", R.mipmap.icon_forward))
                    list.add(TalkingActionEntity("回复", R.mipmap.icon_reply))
                    if (!isCancelOutTime) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.NOTICE, Constants.INVITE_COMPANY -> {
                    if (!isCancelOutTime) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.DING -> {
                    list.add(TalkingActionEntity("复制", R.mipmap.icon_copy))
                    list.add(TalkingActionEntity("回复", R.mipmap.icon_reply))
                    if (!isCancelOutTime) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.VOICE, Constants.VIDEOCALL -> list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                Constants.FORWARD_CHAT_HISTORY, Constants.MERGE -> {
//                    list.add(TalkingActionEntity("督办", R.mipmap.icon_supervise))
                    list.add(TalkingActionEntity("转发", R.mipmap.icon_forward))
                    if (!isCancelOutTime) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
            }
        } else {
            when (msgType) {
                Constants.TEXT, Constants.TOUCH, Constants.REPLY, Constants.HYPERLINKS -> {
//                    list.add(TalkingActionEntity("督办", R.mipmap.icon_supervise))
                    list.add(TalkingActionEntity("复制", R.mipmap.icon_copy))
                    list.add(TalkingActionEntity("转发", R.mipmap.icon_forward))
                    list.add(TalkingActionEntity("回复", R.mipmap.icon_reply))
                    if (isQunZhu) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.AUDIO -> {
//                    list.add(TalkingActionEntity("督办", R.mipmap.icon_supervise))
                    if (audioTxtStatus == CONVERT_SUCCESS || audioTxtStatus == CONVERT_DISCERN_FAIL) {
                        list.add(TalkingActionEntity("收起文字", R.mipmap.icon_away_text))
                    } else {
                        list.add(TalkingActionEntity("转文字", R.mipmap.icon_to_text))
                    }
                    if (isQunZhu) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.IMAGE, Constants.LINK -> {
//                    list.add(TalkingActionEntity("督办", R.mipmap.icon_supervise))
                    list.add(TalkingActionEntity("转发", R.mipmap.icon_forward))
                    list.add(TalkingActionEntity("回复", R.mipmap.icon_reply))
                    if (isQunZhu) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.VIDEO, Constants.DIANZAN, Constants.LOCATION, Constants.CARD -> {
                    list.add(TalkingActionEntity("转发", R.mipmap.icon_forward))
                    list.add(TalkingActionEntity("回复", R.mipmap.icon_reply))
                    if (isQunZhu) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.DING -> {
                    list.add(TalkingActionEntity("复制", R.mipmap.icon_copy))
                    list.add(TalkingActionEntity("回复", R.mipmap.icon_reply))
                    if (isQunZhu) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.NOTICE, Constants.INVITE_COMPANY -> {
                    if (isQunZhu) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
                Constants.VOICE, Constants.VIDEOCALL -> list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                Constants.FORWARD_CHAT_HISTORY, Constants.MERGE -> {
//                    list.add(TalkingActionEntity("督办", R.mipmap.icon_supervise))
                    list.add(TalkingActionEntity("转发", R.mipmap.icon_forward))
                    if (isQunZhu) {
                        list.add(TalkingActionEntity("撤回", R.mipmap.icon_withdraw))
                    }
                    list.add(TalkingActionEntity("多选", R.mipmap.icon_multi_select))
                    list.add(TalkingActionEntity("删除", R.mipmap.icon_delete))
                }
            }
        }
        return list
    }

    override fun onMsgAction(type: String, popupListener: TalkingPopupListener) {
        when (type) {
//            "督办" -> popupListener.onDing()
            "复制" -> popupListener.onCopy()
            "转发" -> popupListener.onRelay()
            "回复" -> popupListener.onReply()
            "撤回" -> popupListener.onRetract()
            "多选" -> popupListener.onMultiSelect()
            "删除" -> popupListener.onDel()
            "转文字" -> popupListener.onAudioToText()
            "收起文字" -> popupListener.onPackUpAudioText()
        }
    }

    override fun getMsgMenuActionList(): List<TalkingActionEntity> {
        val list: MutableList<TalkingActionEntity> = ArrayList()
        list.add(TalkingActionEntity("语音通话", R.mipmap.hpui_menu_call_voice))
        list.add(TalkingActionEntity("视频会议", R.mipmap.hpui_menu_call_meeting))
        list.add(TalkingActionEntity("拨打电话", R.mipmap.hpui_menu_call_phone))
        return list
    }

}